const CommonLogin = { logging : function(message, title, type) { eAjax.get({ url: "/login/log", data: {'message':message, 'title':title, 'type':type}, method: "GET", dataType: "json", contentType: 'application/json' }).done(function (response) { }); }, login : function(param, layerYn, returnUrl) { var deferred = $.Deferred(); $('[data-login-id="errorIdOrPwd"]').hide(); // message hide if(param.userId.length == 0) { alert('아이디를 입력해 주세요.'); deferred.resolve(); } else if(param.pwd.length == 0) { alert('비밀번호를 입력해 주세요.'); deferred.resolve(); } else if(param.userId.length > 50) { alert('아이디를 확인해 주세요.'); deferred.resolve(); } else { eAjax.get({ url: "/login", data: JSON.stringify(param), method: "POST", async: false, dataType: "json", contentType: 'application/json;charset=utf-8', complete: function () { deferred.resolve(); param = null; } }).done(function (response) { if (response.resultCode == '200') { response.data.layerYn = layerYn; response.data.returnUrl = returnUrl; CommonLogin.loginResultCheck(response.data); } else { alert(response.resultMessage); } }); } return deferred.promise(); }, // 로그인 결과 체크 loginResultCheck : function(data) { // sns로그인 새창 닫기 if(window.snsloginw != null){ window.snsloginw.close(); } var alertLayer = $('[data-login-alert]'); var alertMsgs = alertLayer.find('[data-alert-msg]'); var done = function (name) { var targetMsg = alertLayer.find('#' + name); alertMsgs.not(targetMsg).hide(); targetMsg.css('display', ''); alertLayer.trigger('openLayer'); }; // 로그인 성공 시 if(data.loginSuccess){ try { // 앱 푸쉬 동의 관련 스키마 호출 // ** 이랜드몰, 키디키디 요건 if(data.pushForce && AppInfo.isApp()) { if(window.UIPage.dispMallNo = "0000014") { Flutter.emallPushAgree(true, true, "알림(PUSH)메시지 수신동의가 갱신되었습니다."); } else if(window.UIPage.dispMallNo = "0000113") { Flutter.kidikidiStorePushAgree(true, true, "알림(PUSH)메시지 수신동의가 갱신되었습니다."); } } // 장바구니 병합 CommonLogin.mergeCart(data.fsid, data.mbrNo); // 복지포인트 기부동의 팝업 쿠키 if(data.requireDonationAgree){ CommonLogin.setCookie(welfareDonationAgreeCookieName, 1); } // window userInfo 셋팅 CommonLogin.setLoginDataToWindow(data); } catch(error) { console.log(error); } } // 딤드 로딩바 숨기기 $('body').find('.await_loading').hide(); // 회원상태에 따라 분기 처리 switch (data.membState) { // * 고려 우선순위 : 계정잠금 > 무실적 > 장기간 비밀번호 미변경 case '10': // 정상 case '40': // 부분탈퇴:현재 사용하지 않음 옛날 데이터지만 정상임 // 로그인 후 리다이렉트 CommonLogin.redirectAfterLogin(data); break; case '50': //탈퇴 if(data.membOutSelfCancelYn == "Y") { $('#withdrawalMemberLayer').find('[data-withdrawal-cancel-btn]').attr('data-target', data.userId); } done('withdrawalMemberLayer'); break; case '30': //계정잠금 done('accountLockedLayer'); break; case '90': //무실적 done('noPurchaseLayer'); break; case '60': //장기간비밀번호 미변경(로그인성공) // 레이어 호출 done('longTermPwdNotChangedLayer'); break; case '70': //임시비밀번호로 로그인(로그인성공) // 레이어 호출 done('tempPwdLayer'); break; default: // 에러 체크 switch (data.errorCode) { case "202": // Invalid Web Id $('[data-login-id="errorIdOrPwd"]').css('display', ''); // message show break; case "200": // Invalid Access Token alert("장시간 대기로 인증키가 만료 됐습니다. 다시 로그인을 시도해 주세요."); break; case "244": alert("비정상적으로 로그인이 시도되어 접근을 제한합니다."); break; default: alert('회원정보 조회가 원활하지 않습니다. 잠시 후 다시 시도해 주세요.'); break; } break; } }, getUrlForCallLoginSchema : function(returnUrl, data) { try { let addParams = { "callLoginSchema" : "Y" , "dc" : data.deliveryCnt // deliveryCnt , "fl" : data.firstLogin // firstLogin } return CommonLogin.getUrlAfterAddParam(returnUrl, addParams); } catch (e) { console.log("CommonLogin.getParamsForCallLoginSchema error"); return returnUrl; } }, getUrlForCallJoinSchema : function(returnUrl, data) { try { let addParams = { "callLoginSchema" : "J" , "dc" : data.deliveryCnt // deliveryCnt , "fl" : data.firstLogin // firstLogin } return CommonLogin.getUrlAfterAddParam(returnUrl, addParams); } catch (e) { console.log("CommonLogin.getParamsForCallLoginSchema error"); return returnUrl; } }, getUrlAfterAddParam : function (targetUrl, addParams) { let addParamsKeyValue = Object.keys(addParams).map(key => key+"="+addParams[key]).join("&"); let prefix = targetUrl.includes("?")?"&":"?"; let hashIndex = targetUrl.indexOf('#'); if (hashIndex != -1) { // url안에 #이 있을 경우, #앞에 붙이기 let front = targetUrl.substr(0, hashIndex); let back = targetUrl.substr(hashIndex); return front.concat(prefix).concat(addParamsKeyValue).concat(back); } else { return targetUrl.concat(prefix).concat(addParamsKeyValue); } }, redirectAfterLogin : function(data){ if(data.layerYn != 'Y' || data.layerYn == 'SNSLOGIN'){ /** 바닥 로그인 * : returnUrl이 있을 때 그 쪽으로 이동, 나머지는 홈으로 * * returnUrl = 파라미터 */ if(!data.returnUrl){ location.href = CommonLogin.getUrlForCallLoginSchema('/', data); // 메인으로 } else { location.href = CommonLogin.getUrlForCallLoginSchema(data.returnUrl.replace(/&/g,'&'), data); } } else { /** 레이어 팝업 로그인 * : 지정한 액션을 위해 loginSuccess호출 */ // 로그인 앱스키마 CommonLogin.callLoginSchemaForApp(data.userId, data.custId, data.deliveryCnt, data.firstLogin); window.loginSuccess(data); } }, nonMemberBuy : function() { // 로그인 후와 똑같은 로직을 탐 window.loginSuccess(); }, nonMemberLogin : function(param){ var deferred = $.Deferred(); /* parameter sample let param = { ordPsnName: cellPhoneNo: ordNo: }; */ if(param.ordPsnName.length == 0) { alert('주문자명을 입력해 주세요'); deferred.resolve(); } else if(param.cellPhoneNo.length == 0) { alert('휴대폰 번호를 입력해 주세요'); deferred.resolve(); } else if(param.ordNo.length == 0) { alert('주문번호를 입력해 주세요'); deferred.resolve(); } else { eAjax.get({ url: "/login/no-member", data: JSON.stringify(param), method: "POST", async: false, dataType: "json", contentType: 'application/json', complete: function () { deferred.resolve(); } }).done(function (response) { if (response.resultCode != '200') { alert(response.resultMessage); } else { location.href = '/m/order-dtl?ordNo=' + response.data; } }); } return deferred.promise(); }, /** * SNS로그인 */ snsLogin : function(snsType, returnUrl) { var deferred = $.Deferred(); let param = { snsType : snsType ,returnUrl : CommonLogin.convertReturnUrl(returnUrl) }; eAjax.get({ url: "/sns-login/url", data: JSON.stringify(param), method: "POST", dataType: "json", contentType: 'application/json', complete: function () { deferred.resolve(); } }).done(function(response) { try { if(response.resultCode == '200') { /** * PRD */ let snsLoginUrl = response.data.snsLoginUrl.replace(/&/g,'&'); let isFloor = true; // 바닥페이지 이동 여부(default=true) if (navigator.userAgent.toLowerCase().indexOf('chrome/') == -1 && navigator.userAgent.toLowerCase().indexOf('edge/') == -1 && navigator.userAgent.toLowerCase().indexOf('edg/') == -1 && navigator.userAgent.toLowerCase().indexOf('safari/') != 0) { /* 매체구별없이(PC/MO상관없이) 브라우저가 사파리 일 때는 바닥페이지 */ isFloor = true; } else if (window.UIPage.isPc == 'Y') { /* PC가 아닐 때 바닥페이지 */ isFloor = false; } if (!isFloor) { /* PC의 경우: 팝업 */ let size = CommonLogin.getSnsPopupSize()[snsType]; CommonLogin.openSnsPopup(snsLoginUrl, "snslink", size.width, size.height); // 딤드 로딩바 숨기기 $('body').find('.await_loading').hide(); } else { if (snsType == "20" && window.UIPage.isApp == 'Y') { /* 카카오의 경우, SDK로 실행 */ setTimeout(function () { CommonLogin.kakaoSDKLogin(response.data); }, 100) } else { /* 바닥페이지 이동 */ location.href = snsLoginUrl; } } } else { alert(response.resultMessage); // 딤드 로딩바 숨기기 $('body').find('.await_loading').hide(); } } catch(error) { // 딤드 로딩바 숨기기 $('body').find('.await_loading').hide(); } }); return deferred.promise(); }, /****************************************************************** * [카카오 SDK로그인]과 [카카오 SDK자동로그인] 차이점 * 회원가입이 필요한 할 때의 처리 * 그냥 SDK로그인의 경우, 카카오 동의창으로 이동 * SDK자동로그인의 경우, 로그인 레이어 호출 ******************************************************************/ /** * 카카오 SDK로그인 */ kakaoSDKLogin : function(data) { Kakao.cleanup(); Kakao.init(data.kakaoJavascriptKey); Kakao.Auth.authorize({ redirectUri: encodeURI(data.kakaoCallbackUrl.replace(/&/g,'&')), state: data.snsState, channelPublicId : data.kakaoChannelIds }); }, /** * 카카오 SDK자동로그인 */ kakaoSDKAutoLogin : function(data) { Kakao.cleanup(); Kakao.init(data.kakaoJavascriptKey); Kakao.Auth.authorize({ redirectUri: encodeURI(data.kakaoCallbackUrl.replace(/&/g,'&')), state: data.snsState, channelPublicId : data.kakaoChannelIds, prompts: 'none' }); }, /** * 카카오 인앱 여부 판단 for 카카오 자동 로그인 */ isKakaoInApp : function() { try { if (/KAKAOTALK/i.test(navigator.userAgent)) { return true; } else { return false; } } catch (error) { return false; } }, /** * SNS자동로그인 */ snsAutoLogin : function() { let returnUrl = window.location.href; eAjax.get({ url: "/sns-login/auto", data: { snsType : '20' // 카카오 고정 ,returnUrl : returnUrl }, method: "GET", async: false , dataType: "json", contentType: 'application/json' }).done(function(response) { if(response.resultCode == '200') { CommonLogin.kakaoSDKAutoLogin(response.data); } else { alert(response.resultMessage); } }); }, // 로그아웃 후 예외적으로 홈으로 가능 경우 판별 goHomeAfterLogout : function(currentUrl){ if (currentUrl == undefined) { return false; } else if (currentUrl.indexOf('/o/order') != -1) { // 주문서에서 로그아웃 했을 때 홈으로 이동 return true; } else if (currentUrl.indexOf('/o/cart') != -1) { // 장바구니에서 로그아웃 했을 때 홈으로 이동 return true; } else if (currentUrl.indexOf('/m/order-dtl') != -1) { // 주문상세 내역 return true; } else if (currentUrl.indexOf('/m/claim-dtl') != -1) { // 취소/교환/반품 내역 return true; } else if (currentUrl.indexOf('/m/order-cancel') != -1) { // 주문취소(상세) return true; } else if (currentUrl.indexOf('/m/order-change') != -1) { // 교환신청(상세) return true; } else if (currentUrl.indexOf('/m/order-return') != -1) { // 반품신청(상세) return true; } return false; }, logout : function(currentUrl) { eAjax.get({ url: "/logout", data: {}, method: "POST", dataType: "json", contentType: 'application/json' }).done(function (response) { if (response.resultCode == '200') { CommonLogin.callLogoutSchemaForApp(); CommonLogin.deleteCookie('welagr'); // 복지포인트 기부동의 팝업 쿠키 삭제 // 로그아웃 후 화면 처리 if(CommonLogin.goHomeAfterLogout(currentUrl)){ location.href = '/'; } else { location.reload(); } } else { alert("로그아웃 실패"); location.href = '/'; } }); }, mergeCart : function(fsid, mbrNo) { try { let param = { fsid: fsid , mbrNo: mbrNo } eAjax.get({ url: "/v1/merge-cart", data: JSON.stringify(param), method: "POST", dataType: "json", contentType: 'application/json' }).done(function (response) { }); } catch (error) { console.log("mergeCart error:", error); } }, callLoginSchemaForApp : async function(userId, custId, deliveryCnt, firstLogin, age, gender) { try { logIn_branch(userId,custId, deliveryCnt, firstLogin, age, gender); } catch (error){ console.log("callLoginSchemaForApp", error); } }, callLogoutSchemaForApp : function() { if(!AppInfo.isApp()) { return; } Flutter.logout(); }, callJoinSchemaForApp : function(userId,custId,domain) { try { this.getMemberInfo().then(function (data) { const signupParam = { user_id : data.loginId , cust_id : data.customerNo , gender : data.genderDcode , age : data.age , dob : data.birthday , name : data.customerName , phone : data.fullCellphone , email : data.email }; signUp_branch(userId, custId, domain, signupParam); }); } catch (error){ console.log("callJoinSchemaForApp", error); } }, getMemberInfo : async function() { var info = {}; eAjax.get({ url: "/v1/member-info/api", contentType : "application/json", dataType: "json", async: false }).done(function(response){ if(response.resultCode == "200"){ info = response.data; } }); return new Promise((resolve, reject) => { resolve(info); }); }, // 로그인페이지 - SNS 클릭시 팝업 노출 openSnsPopup : function(url, title, w, h) { let dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left; let dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top; let width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width; let height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height; let left = ((width / 2) - (w / 2)) + dualScreenLeft; let top = ((height / 2) - (h / 2)) + dualScreenTop; window.snsloginw = window.open(url, title, 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left); // Puts focus on the newWindow if (window.snsloginw && window.snsloginw.focus) { window.snsloginw.focus(); } }, // 로그인페이지 - SNS 클릭시 노출되는 팝업 사이즈 getSnsPopupSize : function() { let snsPopupSize = { '10' : {width : 444, height : 512}, // Naver '20' : {width : 468, height : 558}, // Kakao '30' : {width : 630, height : 560}, // Google '40' : {width : 500, height : 601}, // Facebook '50' : {width : 500, height : 601} // apple }; return snsPopupSize; }, setLoginDataToWindow : function (data) { window.UIPage.isLogin = 'Y'; window.UIPage.custId = data.custId; window.UIPage.loginId = data.loginId; window.UIPage.mbrNo = data.mbrNo; }, setCookie : function (name, value) { document.cookie = name + '=' + value + '; domain=elandmall.co.kr; path=/;'; }, getCookie : function (name) { const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)')); return match ? match[2] : undefined; }, deleteCookie : function (name) { document.cookie = name + '=; domain=elandmall.co.kr; path=/; expires=Thu, 01 Jan 1999 00:00:10 GMT;'; }, convertReturnUrl : function (returnUrl) { if (!returnUrl) { return '/'; } // 회원가입 페이지 일 때, referer를 셋팅 if(returnUrl.indexOf("/m/join") > 0) { return document.referrer; } return returnUrl; }, getAllowedDomain : function (returnUrl) { let isAllowed; try { const allowedDomain = "elandmall.co.kr"; const url = new URL(returnUrl); isAllowed = url.hostname.endsWith(allowedDomain); } catch (e) { isAllowed = returnUrl.startsWith("/"); } if(isAllowed) { return returnUrl; } else { return "/"; } } }; const welfareDonationAgreeCookieName = 'welagr'; (function (isUndefined) { $(function () { /** 복지포인트 기부동의 팝업 **/ // ui페이지가 아니면 기부동의 팝업 호출 안함 if(!window.UIPage) { return; } // 로그인 상태가 아니면 팝업 호출 안함 if(window.UIPage.isLogin != "Y") { CommonLogin.deleteCookie(welfareDonationAgreeCookieName); // 복지포인트 기부동의 팝업 쿠키 삭제 return; } // 기부동의 팝업 호출 필요 쿠키가 없으면 기부동의 팝업 호출 안함 if(CommonLogin.getCookie(welfareDonationAgreeCookieName) == undefined || CommonLogin.getCookie(welfareDonationAgreeCookieName) == ''){ return; } if ($(".donation-layer-popup").length == 0) { let html = []; if(window.UIPage.isPc == 'Y') { // PC let layouts = drawPopupDonationHtmlPC(); html.push(layouts); html.push(''); html.push(''); } else { // MO let layouts = drawPopupDonationHtmlMO(); html.push(layouts); html.push(''); html.push(''); } var resultHtml = html.join(''); window.EB.util.page.scriptLoaded(resultHtml).done(function () { var $resultHtml = $(resultHtml); var $layer = $resultHtml.find('.cm-layer'); $('body').append($resultHtml); window.EB.util.page.rerun({target: $resultHtml, type: 'flick'}); $layer.trigger('openLayer'); $(".donation-layer-popup .cnfm").on("click", function(e) { e.preventDefault(); let donationAgreeYn; if(window.UIPage.isPc == 'Y') { donationAgreeYn = $("[name='donation']:checked").val(); } else { donationAgreeYn = $("[name='dona_arg']:checked").val(); } if (donationAgreeYn) { let prevAgreeYn; if (donationAgreeYn == 'Y') { prevAgreeYn = $("[name='prv_arg']:checked").val(); } let reqData = {}; reqData.donationAgreeYn = donationAgreeYn; reqData.thirdpartyInfoProvideAgreeYn = prevAgreeYn; eAjax.post({ dataType: "json", contentType: "application/json", url: "/v1/welfare/donation-agree/api", data: JSON.stringify(reqData), async: false }).done(function(response) { if(response.resultCode == "200") { alert("복지포인트 재단 기부 동의 선택이 완료 되었습니다."); } else { alert(response.resultMessage); } }).error(function(response){ alert("일시적인 오류가 발생했습니다. 잠시 후 다시 시도해주세요."); // console.log(response.resultMessage + " [" + response.resultCode + "]"); }); // 복지포인트 기부동의 팝업 쿠키 삭제 : 에러여도 삭제해야 다시 안뜸 CommonLogin.deleteCookie(welfareDonationAgreeCookieName); $(".donation-layer-popup .cnfm").off("click"); $(".donation-layer-popup").hide(); } else { alert("동의 여부를 선택해 주세요."); return; } }); }); } function drawPopupDonationHtmlPC() { let mypagePopupDonationHtml = ""; mypagePopupDonationHtml += '
' + '' + '
'; return mypagePopupDonationHtml; } function drawPopupDonationHtmlMO() { let mypagePopupDonationHtml = ""; mypagePopupDonationHtml += '
' + '' + '
'; return mypagePopupDonationHtml; } }); })();